package com.ldzy.controller;

import com.ldzy.utilts.RespUtil;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@RestController
@RequestMapping("/uploading")
public class ImagerController {
    /**
     * @头像图片路径
     */
    @Value("${file.portraitImage.resource-path}")
    private String portraitImageResourcePath; // 头像,映射路径
    @Value("${file.portraitImage.upload-path}")
    private String portraitImageUploadPath; // 头像,上传路径

    /**
     * @首页资讯图片路径
     */
    @Value("${file.commodityImage.resource-path}")
    private String commodityImageResourcePath; // 首页资讯图片,映射路径
    @Value("${file.commodityImage.upload-path}")
    private String commodityImageUploadPath; // 首页资讯图片,上传路径

    @PostMapping("/")
    public RespUtil upload(@RequestPart("file") MultipartFile file, @RequestParam(value = "type", defaultValue = "portraitImage", required = false) String type) throws IllegalStateException {
        String fileResourcePath = portraitImageResourcePath; // 文件/图片映射路径
        String fileUploadPath = portraitImageUploadPath; // 文件/图片上传路径

        if (type.equals("pressImage")) {
            fileResourcePath = portraitImageResourcePath; // 文件/图片映射路径
            fileUploadPath = portraitImageUploadPath;
        }
        if (type.equals("commodityImage")) {
            fileResourcePath = commodityImageResourcePath;
            fileUploadPath = commodityImageUploadPath;
        }


        // 获取上传的文件名
        String fileName = file.getOriginalFilename();

        // 获得文件后缀名例如.png
        String lastName = fileName.substring(fileName.lastIndexOf("."));

        //拼接图片名称，采用uuid随机数，保证每个图片的图片名称不同
        UUID uuid = UUID.randomUUID();
        // 生成新的文件名 (拼接后的url，替换掉原有的图片名称，改成uuid 16位随机数)
        String newFileName = uuid + lastName;

        // 将文件路径与新的文件名拼接起来, 这是在静态资源中配置的本地绝对路径
        File newPath = new File(fileUploadPath, newFileName);
        System.out.println("图片已上传，路径为：" + newPath);

        // 判断本地路径文件夹是否存在若不存在则逐级创建
        if (!newPath.exists()) {
            newPath.mkdirs();
        }

        try {
            // 上传文件
            file.transferTo(newPath);
            // 将服务器
            // ip地址 http://localhost
            // 端口号 :8088
            // 静态资源的映射路径 http://localhost/8088/upload/file/xxx.jpg
            // 文件名 newFileName
            // 进行拼接,并保存至数据库中
            Map<String, String> map = new HashMap();
            map.put("fileName", newFileName); // 文件名
            map.put("url", fileResourcePath + newFileName); // 文件访问地址

            return RespUtil.success("上传成功！！",map);
        } catch (IOException e) {
            e.printStackTrace();
            return RespUtil.success("上传失败！！");
        }
    }
}
